package 时间类

type (
	X类型_秒时间戳      = TimestampType[timestampType]
	X类型_毫秒时间戳 = TimestampType[timestampMilliType]
	X类型_微秒时间戳 = TimestampType[timestampMicroType]
	X类型_纳秒时间戳  = TimestampType[timestampNanoType]

	X类型_秒日期时间      = LayoutType[DateTimeType]
	X类型_毫秒时间日期 = LayoutType[DateTimeMicroType]
	X类型_微秒时间日期 = LayoutType[DateTimeMilliType]
	X类型_纳秒日期时间  = LayoutType[DateTimeNanoType]

	X类型_日期      = LayoutType[DateType]
	X类型_毫秒日期 = LayoutType[DateMilliType]
	X类型_微秒日期 = LayoutType[DateMicroType]
	X类型_纳秒日期  = LayoutType[DateNanoType]

	X类型_时间      = LayoutType[TimeType]
	X类型_毫秒时间 = LayoutType[TimeMilliType]
	X类型_微秒时间 = LayoutType[TimeMicroType]
	X类型_纳秒时间  = LayoutType[TimeNanoType]
)

func X创建秒时间戳(c *Carbon) *X类型_秒时间戳 {
	return NewTimestampType[timestampType](c)
}
func X创建毫秒时间戳(c *Carbon) *X类型_毫秒时间戳 {
	return NewTimestampType[timestampMilliType](c)
}
func X创建微秒时间戳(c *Carbon) *X类型_微秒时间戳 {
	return NewTimestampType[timestampMicroType](c)
}
func X创建纳秒时间戳(c *Carbon) *X类型_纳秒时间戳 {
	return NewTimestampType[timestampNanoType](c)
}

func X创建秒日期时间(c *Carbon) *X类型_秒日期时间 {
	return NewLayoutType[DateTimeType](c)
}
func X创建毫秒日期时间(c *Carbon) *X类型_微秒时间日期 {
	return NewLayoutType[DateTimeMilliType](c)
}
func X创建微秒日期时间(c *Carbon) *X类型_毫秒时间日期 {
	return NewLayoutType[DateTimeMicroType](c)
}
func X创建纳秒日期时间(c *Carbon) *X类型_纳秒日期时间 {
	return NewLayoutType[DateTimeNanoType](c)
}

func X创建日期(c *Carbon) *X类型_日期 {
	return NewLayoutType[DateType](c)
}
func X创建毫秒日期(c *Carbon) *X类型_毫秒日期 {
	return NewLayoutType[DateMilliType](c)
}
func X创建微秒日期(c *Carbon) *X类型_微秒日期 {
	return NewLayoutType[DateMicroType](c)
}
func X创建纳秒日期(c *Carbon) *X类型_纳秒日期 {
	return NewLayoutType[DateNanoType](c)
}

func X创建秒时间(c *Carbon) *X类型_时间 {
	return NewLayoutType[TimeType](c)
}
func X创建毫秒时间(c *Carbon) *X类型_毫秒时间 {
	return NewLayoutType[TimeMilliType](c)
}
func X创建微秒时间(c *Carbon) *X类型_微秒时间 {
	return NewLayoutType[TimeMicroType](c)
}
func X创建纳秒时间(c *Carbon) *X类型_纳秒时间 {
	return NewLayoutType[TimeNanoType](c)
}

type timestampType int64

func (t timestampType) Precision() int64 {
	return precisionSecond
}

type timestampMilliType int64

func (t timestampMilliType) Precision() int64 {
	return precisionMillisecond
}

type timestampMicroType int64

func (t timestampMicroType) Precision() int64 {
	return precisionMicrosecond
}

type timestampNanoType int64

func (t timestampNanoType) Precision() int64 {
	return precisionNanosecond
}

type DateTimeType string

func (t DateTimeType) Layout() string {
	return X常量_布局模板_DateTime
}

type DateTimeMilliType string

func (t DateTimeMilliType) Layout() string {
	return X常量_布局模板_DateTimeMilli
}

type DateTimeMicroType string

func (t DateTimeMicroType) Layout() string {
	return X常量_布局模板_DateTimeMicro
}

type DateTimeNanoType string

func (t DateTimeNanoType) Layout() string {
	return X常量_布局模板_DateTimeNano
}

type DateType string

func (t DateType) Layout() string {
	return X常量_布局模板_Date
}

type DateMilliType string

func (t DateMilliType) Layout() string {
	return X常量_布局模板_DateMilli
}

type DateMicroType string

func (t DateMicroType) Layout() string {
	return X常量_布局模板_DateMicro
}

type DateNanoType string

func (t DateNanoType) Layout() string {
	return X常量_布局模板_DateNano
}

type TimeType string

func (t TimeType) Layout() string {
	return X常量_布局模板_Time
}

type TimeMilliType string

func (t TimeMilliType) Layout() string {
	return X常量_布局模板_TimeMilli
}

type TimeMicroType string

func (t TimeMicroType) Layout() string {
	return X常量_布局模板_TimeMicro
}

type TimeNanoType string

func (t TimeNanoType) Layout() string {
	return X常量_布局模板_TimeNano
}
